package dataAccessObjects;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;

import entidades.Medico;

public class MedicoDAO {

    EntityManager em;

    public void CreateMedico(EntityManagerFactory emf, Medico medico) {
        try {
            em = emf.createEntityManager();
            em.getTransaction().begin();
            em.persist(medico);
            em.flush();
            em.getTransaction().commit();

        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            em.close();

        }
    }

    public Medico ReadMedico(EntityManagerFactory emf, int id) {
        em = emf.createEntityManager();
        Medico medico = new Medico();
        em.getTransaction().begin();

        try {
            Query query = em.createQuery("SELECT medico FROM Medico medico WHERE medico.mDocumento = " + id);
            medico = (Medico) query.getSingleResult();
            em.getTransaction().commit();

        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            em.close();
        }
        return medico;
    }

    public void UpdateMedico(EntityManagerFactory emf, int id, Medico medico) {
        try {
            em = emf.createEntityManager();
            em.getTransaction().begin();
            Medico medicoNuevo = em.find(Medico.class, id);
            medicoNuevo.setmDocumento(id);
            medicoNuevo.setmNombre(medico.getmNombre());
            medicoNuevo.setmApellido(medico.getmApellido());
            em.merge(medicoNuevo);
            em.getTransaction().commit();

        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            em.close();

        }

    }

    public Medico DeleteMedico(EntityManagerFactory emf, int id) {
        Medico medicoABorrar = new Medico();
        Medico medico = ReadMedico(emf, id);
        try {
            em = emf.createEntityManager();
            em.getTransaction().begin();
            medicoABorrar = em.find(Medico.class, id);
            em.remove(medicoABorrar);
            em.getTransaction().commit();

        } finally {
            em.close();

        }
        return medico;
    }

    public ArrayList<Medico> getAll(EntityManagerFactory emf) {
        em = emf.createEntityManager();
        ArrayList<Medico> listaMedicos = new ArrayList<Medico>();
        em.getTransaction().begin();

        try {
            Query query = em.createQuery("SELECT medico FROM Medico medico");
            List lst = query.getResultList();
            Iterator it = lst.iterator();
            while (it.hasNext()) {
                Medico medico = (Medico) it.next();
              //  listaMedico.add(medico);
            }
            em.getTransaction().commit();

        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            em.close();
        }
        return listaMedicos;
    }
}
